import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
import java.awt.Color;
import java.util.List;
/**
 * Write a description of class MoveWorld here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class MoveWorld extends World
{

   
    private Jugador jugador;
    private Vida [] arrayVida=new Vida[3];
    private boolean activaScroll;
    private boolean perdio;
    private Letrero letrero;
    private int nivel;
    private int cambiaN;
    private int vidas;
    
    /**
     * Constructor del mundo
     */
    public MoveWorld()
    {    
        super(700, 420, 1,false); 
        dibujaMenu();
        setPaintOrder(Jugador.class,Rama.class,Letrero.class);
        cambiaN=1;
        vidas=3;
        Greenfoot.setSpeed(40);
        activaScroll=true;
        perdio=false;
    }
   /** 
    * Dibuja la portada y los botones del menu
    */
    public void dibujaMenu()
    {
        setBackground("portada5.png");
        Boton boton= new BotonJugar();
        addObject(boton,130,260);
        boton = new BotonAyuda();
        addObject(boton,260,370);
        boton = new BotonCredito();
        addObject(boton,445,260);
        boton = new BotonRecord();
        addObject(boton,572,370);
        cambiaN=1;
        vidas=3;
        perdio=false;
    }
   /**
     * Coloca todos los objetos en su lugar para comenzar el juego en el nivel 1
    */
   public void iniciaJuego()
   {  
        jugador = new Jugador();
        addObject(jugador, 51, 203);
        addObject(new Rama(true), 105, 364);      
        addObject(new Rama(false), 276, 244);
        addObject(new Rama(true), 443, 204);  
        addObject(new Rama(false), 611, 314);
        apareceMonedas();
        apareceRanas();
        apareceSombrillas();
        for(int i=0;i<3;i++)
        {
            arrayVida[i]=new Vida();
        }
        addObject(arrayVida[0],585,20);
        addObject(arrayVida[1],615,20);
        addObject(arrayVida[2],645,20);
        letrero = new Letrero(  " 0 ",0,Color.DARK_GRAY);
        addObject(letrero,680, 20);
        cambiaN=1;
    }
   /**
    * Regresa el letrero de los puntos para poderr modificar un solo letrero
    * en lugar de colocar demasiados
    */
   public Letrero getLetrero()
   {
        return(letrero);
    
   }
   /**
    * Actua del mundo
    */
   public void act()
   {
      Perdio();
      if(activaScroll)
        scroll();
   }
   /**
    * Activa o desactiva el efecto del scroll
    */
   public void setActivaScroll(boolean unEstado)
   {
       activaScroll=unEstado;
    
   }
   /**
    * Hace el efecto de scroll moviendo la imagen de fondo
    */
   public void scroll()  
   {
       GreenfootImage imag = new GreenfootImage(getBackground());  
       getBackground().drawImage(imag, -1, 0);  
       getBackground().drawImage(imag, getWidth()-1, 0);  
   }
    /**
     * Regresa el jugador para  asi poder saber su posicion en x y y
     */
   public Jugador getJugador()
   {
      return(jugador);
    
   }
   /**
    * Cambia la variable de nivel segun los puntos que se vayan sumando
    */
   public void cambiaNivel()
   {  
     int puntos=jugador.getPuntos();
     if(puntos>48&& cambiaN==1)
     { 
         setBackground("m9.jpg");
         borraPersonajes();
         jugador.setLocation( 51, 203);
         cambiaN=2;
         Letrero letrero1 = new Letrero(  " LEVEL 2",60,Color.RED);
         addObject(letrero1,350, 90);
         Greenfoot.delay(30);
         removeObject(letrero1);
         apareceRanas();
         apareceRegalos();
         apareceAves();
         apareceSombrillas();
         apareceMonedas();
                   
      }
     if(puntos>98&&cambiaN==2)
     {
         setBackground("m14.jpg");
         borraPersonajes();
         jugador.setLocation( 51, 203);
         cambiaN=3;
         Letrero letrero1 = new Letrero(  " LEVEL 3",60,Color.GREEN);
         addObject(letrero1,350, 90);
         Greenfoot.delay(30);
         removeObject(letrero1);
         apareceRanas();
         apareceRegalos();
         apareceAves();
         apareceSombrillas();
         apareceArdillas();
         apareceMonedas();
     }
     if(puntos>128&&cambiaN==3)
     { 
         cambiaN=4;
         gano();
     }
     
        
   }
   /**
    * Borra a los actores de la clase enemigo y bonos este metodo es llamado en la clase jugador
    */
   public void borraPersonajes()
   {
         removeObjects(getObjects(Enemigo.class));
         removeObjects(getObjects(Bonos.class));
   }
   /**
    * Regresa las vidas que se han tienen
    */
   public int getVidas()
   {
         return vidas; 
   }
   /**
    * Decrementa las vidas en pantalla cambiando la imagen por un corazon negro
    */
   public void decrementaVida()
   {
        vidas--;
        if(vidas>=0)
             arrayVida[vidas].pierdeVida();
        jugador.setLocation(51,203);
   }
   /**
    * Si el jugador ya no tiene vidas aparece el mensaje de que perdio y le da la opcion de regresar con el boton de atras
    */
   public void Perdio()
   {
         if(vidas<=0&&perdio==false)
         {
             perdio=true;
             Greenfoot.delay(50);
             removeObjects(getObjects(null));
             addObject(new Letrero("GAME OVER", 130,Color.MAGENTA),350, 90);
             Greenfoot.delay(50);
             removeObjects(getObjects(null));
             jugador.setScore();
             ScoreBoard scoreboard=new ScoreBoard(getWidth(),getHeight());
             addObject(scoreboard,getWidth()/2,getHeight()/2);  
             addObject(new Atras(),50,35);
         }
   }

    /**
     * Aparece las monedas sobre las ramas
     */  
   public void apareceMonedas()
   {
          java.util.List<Rama> ramas=getObjects(Rama.class);
          
            for(int i=0;i<ramas.size();i++)
            {
                addObject(new Moneda(),ramas.get(i).getX()+60,ramas.get(i).getY()-ramas.get(i).getImage().getHeight()/2-20);
                addObject(new Moneda(),ramas.get(i).getX()-20,ramas.get(i).getY()-ramas.get(i).getImage().getHeight()/2-20);
                addObject(new Moneda(),ramas.get(i).getX()+20,ramas.get(i).getY()-ramas.get(i).getImage().getHeight()/2-20);
                addObject(new Moneda(),ramas.get(i).getX()-60,ramas.get(i).getY()-ramas.get(i).getImage().getHeight()/2-20);
            }
   }
   
    /**
     * Aparece las ardillas sobre las ramas
     */  
   public void apareceArdillas()
   {
          java.util.List<Rama> ramas=getObjects(Rama.class);
          
            for(int i=1;i<ramas.size();i++)
            {      
                if(Greenfoot.getRandomNumber(2)==0)
                addObject(new Ardilla(),ramas.get(i).getX()-60+Greenfoot.getRandomNumber(120),ramas.get(i).getY()-ramas.get(i).getImage().getHeight()/2-20);
            }
   }
   
    /**
     * Aparece las ranas sobre las ramas
     */  
   public void apareceRanas()
   {
          java.util.List<Rama> ramas=getObjects(Rama.class);
          
            for(int i=1;i<ramas.size();i++)
            {      
                if(Greenfoot.getRandomNumber(2)==0)
                addObject(new Rana(),ramas.get(i).getX()-60+Greenfoot.getRandomNumber(120),ramas.get(i).getY()-ramas.get(i).getImage().getHeight()/2-20);
            }
   }
   
    /**
     * Aparece los regalos sobre las ramas
     */  
   public void apareceRegalos()
   {
          java.util.List<Rama> ramas=getObjects(Rama.class);
          
            for(int i=1;i<ramas.size();i++)
            {      
                if(Greenfoot.getRandomNumber(2)==0)
                addObject(new Regalo(),ramas.get(i).getX()-60+Greenfoot.getRandomNumber(120),ramas.get(i).getY()-ramas.get(i).getImage().getHeight()/2-20);
            }
   }
   
    /**
     * Aparece las sombrillas sobre las ramas
     */  
   public void apareceSombrillas()
   {
          java.util.List<Rama> ramas=getObjects(Rama.class);
          
            for(int i=1;i<ramas.size();i++)
            {      
                if(Greenfoot.getRandomNumber(2)==0)
                addObject(new Sombrilla(),ramas.get(i).getX()-60+Greenfoot.getRandomNumber(120),ramas.get(i).getY()-ramas.get(i).getImage().getHeight()/2-20);
            }
   }
   
    /**
     * Aparece las aves en la parte superior del escenario
     */  
   public void apareceAves()
   {
       { Ave nvo = new Ave();
           switch(Greenfoot.getRandomNumber(1))
          {
            case 0:  addObject(nvo, 250, 77);
                 break;
            case 1:  nvo.setLado(true);
                  addObject(nvo, 600, 77);
                  break;
            }
      
        
       }
   }
   /**
    * Regresa la variable de nivel
    */
   public int getCambiaN()
   {
         return  cambiaN;
   }
   /**
    * Cambia la imagen de fondo y muestra un mensaje de que ha ganado
    */
   public void gano()
   {   
        removeObjects(getObjects(null));
        activaScroll=false; 
        setBackground("gano.jpg");
        Jugador jugador2=new Jugador();
        addObject( jugador2,51,340);
        jugador2.setJugar(false);
        jugador2.mueveSobrePiso();
    }
   
    
}
    
 



